package com.lhq.tag_tales.aspect;


import com.lhq.tag_tales.common.ErrorCodeEnum;
import com.lhq.tag_tales.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * 校验当前方法参数是否为空
 * 用户状体是否正常
 * 用户是否登录
 * 排除登录方法
 */
@Aspect
@Component
@Slf4j
public class CheckParamsIsNull {
    @Pointcut("execution(public * com.lhq.tag_tales.controller.*.*(..))")
    public void checkUserInfo() {
    }


    @Before("checkUserInfo()")
    public void checkInfo(JoinPoint joinPoint) {
        // 1. 获取方法参数
        Object[] args = joinPoint.getArgs();

        // 2. 检查 args 数组中是否存在 null 值
        if (args != null && java.util.Arrays.stream(args).anyMatch(Objects::isNull)) {
            throw new BusinessException(ErrorCodeEnum.PARAMS_ERROR,"Method arguments contain null values");
        }
    }
}
